package codeflyer.server.utils;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

/**
 * @author CodeFlyer
 * @date May 26, 2020
 * @version 1.0
 */

public class GetInternetIp {

	 public static String INTRANET_IP = getIntranetIp(); // 内网IP
	    public static String INTERNET_IP = getInternetIp(); // 外网IP

	    private GetInternetIp(){}

	    /**
	     * 获得内网IP
	     * @return 内网IP
	     */
	    private static String getIntranetIp(){
	        try{
	            return InetAddress.getLocalHost().getHostAddress();
	        } catch(Exception e){
	            throw new RuntimeException(e);
	        }
	    }

	    /**
	     * 获得外网IP
	     * @return 外网IP
	     */
	    private static String getInternetIp(){
	        try{
	            Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
	            InetAddress ip = null;
	            Enumeration<InetAddress> addrs;
	            while (networks.hasMoreElements())
	            {
	                addrs = networks.nextElement().getInetAddresses();
	                while (addrs.hasMoreElements())
	                {
	                    ip = addrs.nextElement();
	                    if (ip != null
	                            && ip instanceof Inet4Address
	                            && ip.isSiteLocalAddress()
	                            && !ip.getHostAddress().equals(INTRANET_IP))
	                    {
	                        return ip.getHostAddress();
	                    }
	                }
	            }

	            // 如果没有外网IP，就返回内网IP
	            return INTRANET_IP;
	        } catch(Exception e){
	            throw new RuntimeException(e);
	        }
	    }
	
}


